/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import bentity.beUsuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author luis
 */
public class daoUsuario {

    protected Connection conexion;    

    public int registrarUsuario(beUsuario usuario) throws SQLException{
        conexion = daoHelper.dameConexion();
        String sql = "INSERT INTO USUARIO (cargo, nombre, contrasenha, estado, id_perfil, ingreso) VALUES (?, ?, ?, ?, ?, ?)";
        PreparedStatement ps = conexion.prepareStatement(sql);
        
        ps.setString(1, usuario.getCargo());
        ps.setString(2, usuario.getNombre());
        ps.setString(3, usuario.getContrasenha());
        ps.setInt(4, beUsuario.U_ACTIVO);
        ps.setInt(5, usuario.getIdPerfil());
        ps.setBoolean(6, usuario.getIngreso());
        ps.executeUpdate();
        ps.close();
        conexion.close();
        return daoHelper.TRANSACCION_EXITOSA;
    }

    public int actualizarUsuario(beUsuario usuario) throws SQLException{
        conexion = daoHelper.dameConexion();
        String sql = "UPDATE USUARIO SET cargo=?, nombre=?, contrasenha=?, estado=?, id_Perfil=?, ingreso=? WHERE id_Usuario = ?";
        PreparedStatement ps = conexion.prepareStatement(sql);
        ps.setString(1, usuario.getCargo());
        ps.setString(2, usuario.getNombre());
        ps.setString(3, usuario.getContrasenha());
        ps.setInt(4, usuario.getEstado());
        ps.setInt(5, usuario.getIdPerfil());
        ps.setBoolean(6, usuario.getIngreso());
        ps.setInt(7, usuario.getIdUsuario());
        ps.executeUpdate();
        ps.close();
        conexion.close();
        return daoHelper.TRANSACCION_EXITOSA;
    }

    public ArrayList<beUsuario> queryUsuariosByFilters(String cargo, String nombre, int id_Perfil) throws SQLException {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        int []contador = new int[5];
        ArrayList<beUsuario> listaUsuarios = new ArrayList<beUsuario>();
        try{
            String sql = "SELECT * FROM USUARIO WHERE (ESTADO = ? OR ESTADO = ?) ";
            contador[0] = 1;
            contador[1] = 1;

            if (!cargo.isEmpty()){
                sql += " AND cargo LIKE ?||'%' ";
                contador[2] = 1;
            }

            if (!nombre.isEmpty()){
                sql += " AND nombre LIKE ?||'%' ";
                contador[3] = 1;
            }

            if (id_Perfil!=0){
                sql += " AND id_perfil =? ";
                contador[4] = 1;
            }


            conn = daoHelper.dameConexion();
            ps = conn.prepareStatement(sql);
            int j=0;
            for(int i=0; i<5; i++){
                if (contador[i]==1){
                    j++;
                    switch (i){
                        case 0:
                            ps.setInt(j,beUsuario.U_ACTIVO);
                            break;
                        case 1:
                            ps.setInt(j,beUsuario.U_BLOQUEADO);
                            break;
                        case 2:
                            ps.setString(j,cargo);
                            break;
                        case 3:
                            ps.setString(j,nombre);
                            break;
                        case 4:
                            ps.setInt(j,id_Perfil);
                            break;

                    }
                }
            }

            rs = ps.executeQuery();            
            beUsuario usuario = null;
            while (rs.next()){
                usuario = new beUsuario(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getInt(5),rs.getInt(6),rs.getBoolean(7));
                listaUsuarios.add(usuario);
            }
            rs.close();
            ps.close();
            conn.close();
        }      
        catch (Exception e) {
            System.out.print(e.getMessage());
            return null;
        }
        return listaUsuarios;
    }

    public beUsuario queryByNombre(String nomUsuario) throws SQLException{
        conexion = daoHelper.dameConexion();
        String sql = "SELECT * FROM USUARIO WHERE NOMBRE = ? AND (ESTADO = ? OR ESTADO = ?)";
        PreparedStatement ps = conexion.prepareStatement(sql);
        ps.setString(1, nomUsuario);
        ps.setInt(2,beUsuario.U_ACTIVO);
        ps.setInt(3,beUsuario.U_BLOQUEADO);

        try{
            ResultSet rs = ps.executeQuery();
            beUsuario usuario = null;
            while (rs.next()){
                usuario = new beUsuario(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getInt(5),rs.getInt(6),rs.getBoolean(7));
            }
            rs.close();
            ps.close();
            conexion.close();
            return usuario;
        }
        catch (Exception e) {
            System.out.print(e.getMessage());
            return null;
        }
    }

    public beUsuario queryById(int codUsuario) throws SQLException{
        conexion = daoHelper.dameConexion();
        String sql = "SELECT * FROM USUARIO WHERE id_Usuario = ? AND (ESTADO = ? OR ESTADO = ?)";
        PreparedStatement ps = conexion.prepareStatement(sql);
        ps.setInt(1, codUsuario);
        ps.setInt(2,beUsuario.U_ACTIVO);
        ps.setInt(3,beUsuario.U_BLOQUEADO);

        try{
            ResultSet rs = ps.executeQuery();

            beUsuario usuario = null;
            while (rs.next()){
                usuario = new beUsuario(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getInt(5),rs.getInt(6),rs.getBoolean(7));
            }
            rs.close();
            ps.close();
            conexion.close();
            return usuario;
        }
        catch (Exception e) {
            System.out.print(e.getMessage());
            return null;
        }
    }


    public int eliminarUsuario(int codUsuario) throws SQLException{
        Connection conn = daoHelper.dameConexion();        
        String sql = "UPDATE USUARIO SET ESTADO = ? WHERE ID_USUARIO = ?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, beUsuario.U_INACTIVO);
        ps.setInt(2, codUsuario);
        ps.executeUpdate();
        ps.close();
        conn.close();
        return daoHelper.TRANSACCION_EXITOSA;
    }

}
